package com.bjsxt.comment.service.impl;

import com.bjsxt.comment.dao.CommentDao;
import com.bjsxt.comment.dao.OrderDao;
import com.bjsxt.comment.service.CommentService;
import com.bjsxt.livegoods.pojo.Comment;
import com.bjsxt.livegoods.pojo.Order;
import com.livegoods.commons.vo.LivegoodsResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @ClassName : CommentServiceImpl
 * @Description : 评论服务
 * @Author : ZWZ
 * @Date: 2021/8/26 11:00
 */
@Service
public class CommentServiceImpl implements CommentService {

    @Autowired
    private CommentDao commentDao;
    @Autowired
    private OrderDao orderDao;

    /**
     * 根据商品 ID， 分页查询商品评论
     *
     * @param itemId 商品 ID
     * @param page   第几页
     * @param size   每页多少条
     * @return
     */
    @Override
    public LivegoodsResult findCommentByItemId(String itemId, int page, int size) {
        try {
            Query query = new Query();
            query.addCriteria(Criteria.where("itemId").is(itemId));
            query.with(PageRequest.of(page, size));
            List<Comment> commentsByPage = commentDao.findCommentsByPage(query);
            for (Comment comment : commentsByPage) {
                // 隐藏用户手机号。 135 1234 4321 -> 135 **** 4321
                String username = comment.getUsername();
                comment.setUsername(username.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"));
            }
            LivegoodsResult result = LivegoodsResult.ok(commentsByPage);
            // 查看评论总数
            long count = commentDao.countByQuery(itemId);
            // 总记页数
            long totalPages = (count % size == 0) ? (count / size) : ((count / size) + 1);
            // 是否有更多数据
            result.setHasMore((page + 1) < totalPages);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return LivegoodsResult.error(e.getMessage());
        }
    }

    @Override
    public LivegoodsResult feelback(String orderId, String comment) {
        try {
            // 根据订单主键，查询订单数据
            Order order = orderDao.findById(orderId);

            Comment saveComment = new Comment();
            saveComment.setUsername(order.getUsername());
            saveComment.setItemId(order.getItemId());
            saveComment.setComment(comment);
            // 前端应用未提供星级请求参数。 赋予默认值 3。
            saveComment.setStart(3);
            // 保存数据到 MongoDB
            commentDao.save(saveComment);
            // 修改订单状态， commentState = 2，设置为已评论
            orderDao.updateCommentState(orderId, 2);

            return LivegoodsResult.ok(saveComment);
        } catch (Exception e) {
            e.printStackTrace();
            return LivegoodsResult.error();
        }
    }

}
